# coding=utf8
import os

class Interfaz:

	def __init__(self, buscador):
		self._productos_seleccionados = set()
		self._buscador = buscador
		self._productos = list(buscador.catalogo())


	def iniciar(self):
		self._ofrecerMenuPrincipal()


	def _ofrecerMenuPrincipal(self):
		
		while True:
		
			os.system('clear')
		
			if len(self._productos_seleccionados) > 0:
				self._mostrarProductosSeleccionados()
			
			print("Por favor elija una de las siguientes opciones:\n")
		
			if len(self._productos_seleccionados) > 0:
				print("1- Agregar otro producto")
				print("2- Buscar productos seleccionados")
			else:
				print("1- Seleccionar productos")
			
			print("0- Salir")
			print("\n")
		
			while True:
				
				valor_seleccionado = self._solicitarInput()
		
				if valor_seleccionado == 0:
					return;
				elif valor_seleccionado == 1:
					self._ofrecerMenuProductos()
					break
				elif len(self._productos_seleccionados) > 0 and valor_seleccionado == 2:
					self._buscarProductosSeleccionados()
					break
				else:
					print("La opcion seleccionada no es valida. Por favor ingrese un numero dentro de las opciones")


	def _ofrecerMenuProductos(self):
		os.system('clear')
		
		print("Por favor elija uno de los siguientes productos:\n")
		
		for n, producto in enumerate(self._productos, 1):
			print(str(n) + "- " + producto.nombre())

		print("\n0- Volver")
		print("\n")
		
		while True:
				
			valor_seleccionado = self._solicitarInput()
	
			if valor_seleccionado == 0:
				return;
			elif valor_seleccionado > 0 and valor_seleccionado <= len(self._productos):
				producto = self._productos[valor_seleccionado-1];
				if producto in self._productos_seleccionados:
					print("Ya eligio " + producto.nombre() + ". Por favor elija otro producto.")
				else:
					self._productos_seleccionados.add(producto)
					break
			else:
				print("La opcion seleccionada no es valida. Por favor ingrese un numero dentro de las opciones")


	def _solicitarInput(self):
		valor = raw_input("Seleccione una opcion: ")
		if valor.isdigit():
			return int(valor)
		else:
			return -1
		
	def _mostrarProductosSeleccionados(self):
		print("Usted hasta el momento seleccionó los siguientes productos:")
		for producto in self._productos_seleccionados:
			print("- " + producto.nombre())
		print("\n")

	def _buscarProductosSeleccionados(self):
		os.system('clear')

		for producto in self._productos_seleccionados:
			print("Buscando " + producto.nombre() + "...\n")
			busqueda = self._buscador.crearBusquedaPara(producto)
			resultado = self._buscador.buscar(busqueda)
			self._mostrarResultado(resultado)
			print("\n")
			
		self._productos_seleccionados = set()
		raw_input("Presione ENTER para realizar una nueva búsqueda.")
			
	def _mostrarResultado(self, resultado):
		
		for datoDeCompra in resultado:
			print(str(datoDeCompra.precio()) + "\t" + str(datoDeCompra.ubicacion()))
			
		if not resultado:
			print("No hay resultados para su búsqueda")
